package com.fzu.mmdbproxyframework.multitask;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

import com.fzu.mmdbproxyframework.model.MMDataNodeCluster;


/**
 * 定时任务
 * @author linwei
 *
 */
public abstract class ScheduledTask implements Runnable {
	

	protected Logger logger;

	/**
	 * 停止任务
	 */
	public boolean stop = false;

	/**
	 * 错误次数.
	 */
	private long errCount = 0;




	
	public ScheduledTask() {
		
	}

	public abstract void doTask();

	@Override
	public void run() {
		if(isStop() == false){
			doTask();
		}else{
			System.out.println("Stop=true");
		}
	}

	/**
	 * 子类覆盖此方法,提供表示执行时间定义的Cron表达式.同时指示此定时任务的执行方式为基于cron表达式.
	 */
	public String getCron() {
		return null;
	}

	/**
	 * 子类覆盖此方法,用于设置两次任务执行的间隔时间(单位:毫秒).同时指示此定时任务的执行方式为以固定间隔时间的重复执行(
	 * 下一次的执行会在上一次执行完成后固定的时间间隔后开始).
	 * 
	 * 注:如果子类同时覆盖了getCron()方法,那么优先使用基于cron表达式方式的定时任务.
	 * 
	 */
	public long getDelay() {
		return -1;
	}

	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("ScheduledTask [cron=");
		builder.append(this.getCron());
		builder.append(", delay=");
		builder.append(this.getDelay());
		builder.append("]");
		return builder.toString();
	}

	public boolean isStop() {
		return stop;
	}

	public void setStop(boolean stop) {
		this.stop = stop;
	}

}

